package Negocio;

import java.io.Serializable;




import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;

import Servicios.ServiceException;


@Entity
@DiscriminatorValue("EmpresaRegular")
public class EmpresaRegular extends ClienteEmpresa implements Serializable {

	@OneToOne(fetch = FetchType.EAGER, mappedBy = "empresa",cascade = CascadeType.ALL)
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	private CuentaCorriente cc;

	public EmpresaRegular() {
		super();
	}
	
	public boolean aceptaCC(){
	return true;	
	}
	
	public void altaCreditoCC(String descripcion, Float importeMovimiento) throws ServiceException{
		 cc.altaItemCreditoCC(descripcion,  importeMovimiento);
	}

	public void altaDebitoCC(String descripcion, Float importeMovimiento, Envio envio) throws Exception{
		if (cc.autorizaTransaccion(importeMovimiento)) {
			cc.altaItemDebitoCC(descripcion,  importeMovimiento, envio);
		} 
		else throw new Exception ("Saldo de Limite de Credito Insuficiente");
	}
	
	public EmpresaRegular(String cuit, String razonSocial, 
			String calle, String numero, String pais, String piso,
			String departamento, String entreCalle1, String entreCalle2,
			String localidad, String provincia, String codigoPostal, String latitud, String longitud,
			Float limiteDeCredito) {
		super();
		this.cuit = cuit;
		this.clienteId = cuit;
		this.razonSocial = razonSocial;
		this.direccion = new Direccion(calle, numero, pais, piso, departamento,
				entreCalle1, entreCalle2, localidad, provincia, codigoPostal, latitud, longitud);
		this.cc= new CuentaCorriente(this);
		this.cc.setLimiteDeCredito(limiteDeCredito);
	}

	
	public ClienteDTO getClienteDTO(){
		ClienteDTO cDTO = new ClienteDTO(this.clienteId, "EmpresaRegular", "","","", this.cuit,
				this.razonSocial, this.getCalle(), this.getNumero(), this.getPais(),
				this.getPiso(), this.getDepartamento(), this.getEntreCalle1(),
				this.getEntreCalle2(), this.getLocalidad(), this.getProvincia(),
				this.getCodigoPostal(), this.getLatitud(), this.getLongitud());
		return cDTO;
	}
	
	public CuentaCorriente getCc() {
		return cc;
	}

	public void setCc(CuentaCorriente cc) {
		this.cc = cc;
	}

	
}
